package com.hmall.pay.domain.vo;

import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;

import java.time.LocalDateTime;

/**
 * 支付订单视图对象
 * 用于前端展示和接口响应的支付订单数据模型
 * 继承自PayOrder实体类，按需选择展示字段
 */
@Data
@ApiModel(description = "支付订单视图实体，用于前端展示和接口响应")
public class PayOrderVO {

    /**
     * 支付订单ID
     * 支付系统生成的唯一标识，用于定位订单
     */
    @ApiModelProperty(value = "支付订单ID", example = "1001")
    private Long id;

    /**
     * 业务订单号
     * 关联业务系统中的订单ID（如交易订单ID）
     */
    @ApiModelProperty(value = "业务订单号", example = "20230501001")
    private Long bizOrderNo;

    /**
     * 支付单号
     * 支付系统内部唯一订单号，用于标识支付交易
     */
    @ApiModelProperty(value = "支付单号", example = "PAY20230501001")
    private Long payOrderNo;

    /**
     * 支付用户ID
     * 发起支付的用户标识
     */
    @ApiModelProperty(value = "支付用户ID", example = "1001")
    private Long bizUserId;

    /**
     * 支付渠道编码
     * 标识支付来源渠道（如支付宝、微信、余额等）
     */
    @ApiModelProperty(value = "支付渠道编码", example = "ALIPAY")
    private String payChannelCode;

    /**
     * 支付金额
     * 以"分"为单位的支付金额（如19900表示199元）
     */
    @ApiModelProperty(value = "支付金额（单位：分）", example = "19900")
    private Integer amount;

    /**
     * 支付类型
     * 1：H5支付，2：小程序支付，3：公众号支付，4：扫码支付，5：余额支付
     */
    @ApiModelProperty(value = "支付类型", example = "1")
    private Integer payType;

    /**
     * 支付状态
     * 0：待提交，1：待支付，2：支付超时或取消，3：支付成功
     */
    @ApiModelProperty(value = "支付状态", example = "3")
    private Integer status;

    /**
     * 拓展字段
     * 存储不同支付渠道的特有参数（JSON格式）
     */
    @ApiModelProperty(value = "拓展字段", example = "{\"authCode\":\"123456789\"}")
    private String expandJson;

    /**
     * 第三方返回业务码
     * 支付渠道返回的业务结果码（如支付宝成功码10000）
     */
    @ApiModelProperty(value = "第三方返回业务码", example = "10000")
    private String resultCode;

    /**
     * 第三方返回提示信息
     * 支付渠道返回的结果描述
     */
    @ApiModelProperty(value = "第三方返回提示信息", example = "支付成功")
    private String resultMsg;

    /**
     * 支付成功时间
     * 记录支付完成的时间戳
     */
    @ApiModelProperty(value = "支付成功时间", example = "2023-05-01 10:30:00")
    private LocalDateTime paySuccessTime;

    /**
     * 支付超时时间
     * 支付订单的失效时间（如30分钟后超时）
     */
    @ApiModelProperty(value = "支付超时时间", example = "2023-05-01 11:00:00")
    private LocalDateTime payOverTime;

    /**
     * 支付二维码链接
     * 扫码支付时生成的二维码URL
     */
    @ApiModelProperty(value = "支付二维码链接", example = "https://pay.hmall.com/qr/1001")
    private String qrCodeUrl;

    /**
     * 创建时间
     * 记录支付订单创建的时间
     */
    @ApiModelProperty(value = "创建时间", example = "2023-05-01 10:00:00")
    private LocalDateTime createTime;

    /**
     * 更新时间
     * 记录支付订单最后一次更新的时间
     */
    @ApiModelProperty(value = "更新时间", example = "2023-05-01 10:30:00")
    private LocalDateTime updateTime;

}